|
Date : 26 aout 1991 Protection : MOT DE PASSE ( manivelle ) Programme : COUGAR FORCE Outils : SOFT-ICE V2.50 Fichier : FRED8.COM Temps pass� : 2 HEURES Soci�t� : INFERENCE M.D.O. Divers : D�j� essay� plusieurs fois. Origine : INDONESIE Num�ro : 137 Ci dessous la chaine de COUGAR FORCE: CS=0FF7 CS:09FE C45EF8 LES BX,[BP-08] CS:0A01 268A07 MOV AL,ES:[BX] ; MOV BYTE PTR ES:[BX],40 CS:0A04 B400 MOV AH,00 ����������������������� CS:0A06 257000 AND AX,0070 CS:0A09 B104 MOV CL,04 CS:0A0B D3F8 SAR AX,CL CS:0A0D C45EF4 LES BX,[BP-0C] CS:0A10 268A17 MOV DL,ES:[BX] ; MOV BYTE PTR ES:[BX],04 CS:0A13 B600 MOV DH,00 ����������������������� CS:0A15 3BC2 CMP AX,DX CS:0A17 741C JZ 0A35 ; JMP 0A35 CS:0A19 B8FFFF MOV AX,FFFF �������� CS:0A1C 50 PUSH AX Il suffit de placer ces trois instructions � la suite les unes des autres � partir de 0A01 comme dans GEISHA. Puis de cr�er un fichier FRED8.COM qui d�tourne l'INT 21 sous-fonction 3D. Malheureusement le programme se plante apr�s deux ou trois appels de cet INT ! M�me ph�nom�ne que pour SUPER_C. J'essaie avec une INT "vide" c'est � dire sans traitement et sans PUSH ni POP des registres; le programme ne se plante plus. J'y replace les PUSH et POP et cel� fonctionne toujours. J'active le premier test sans rien d'autre ( test du drapeau ) et �a se plante ! Cel� ne signifie qu'une chose: avec mon test je modifie forcement les drapeaux et comme je ne vois pas de PUSHF ni de POPF au d�but et � la fin de ma routine je d�cide d'en ins�rer. Et cel� fonctionne. C'est � se demander comment les pr�c�dents FRED ont fait pour tourner ! Ci-dessous la routine en assembleur: ; PATCH POUR LE PROGRAMME COUGAR FORCE ; FREDDY_SOFT code segment org 100h assume cs:code start: jmp installe ; On va installer la routine r�sidente... cr equ 0dh lf equ 0ah flag equ 3Dh ; Contenu de AH devant �tre test�. adr_ip equ 4701h ; En CS:4701 il faut avoir 268A instok db cr,lf,' D�tournement de l',39,'INT 21 sous-fonction 3D' db cr,lf db ' ....FREDDY_SOFT....','$' drap db 0,0 elimine db cr,lf,'J',39,'ai en principe tout remis en l',39,'�tat....' db cr,lf,'$' int21 label dword ; sauvegarde des adresses SEG:OFF de l'INT21 d'origine i40off db 0,0 ; OFFSET i40seg db 0,0 ; SEGMENT tsrint40 proc far jmp short apr�s_id db 'FR' ; On intercalle au d�but du code un identificateur apr�s_id: pushf ; Un PUSHF qui n'a pas de POPF ! voir FREDCOM.exp push ds ; push dx ; push cx ; On ne sauve que les registres utilis�s... push bx ; push ax ; cmp byte ptr [drap],1 ; Si 1 on devient transparent. jz suite ; Saut � l'INT 21 toutes fonctions valid�es. cmp ah,flag ; AH = 3D. jnz suite ; Si non on traite les INT 21 normalement. mov dx,sp ; On sauve SP dans DX. mov cx,20 incr: pop ds dec cx jz s cmp word ptr ds:[adr_ip+5],7025h jnz incr mov bx,[adr_ip] mov word ptr [bx],0c626h add bx,2 mov word ptr [bx],4007h add bx,2 mov word ptr [bx],0c626h add bx,2 mov word ptr [bx],0407h add bx,2 mov word ptr [bx],2aebh mov byte ptr [drap],1h s: mov sp,dx ; On restaure SP. suite: pop ax ; On restaure tous les registres pop bx pop cx pop dx pop ds popf jmp int21 ; Appel de l'INT21 officielle tsrint40 endp eor: |